package it.unicam.ids.pvm.data.mysql;

import it.unicam.ids.pvm.data.AnnuncioDAO;
import it.unicam.ids.pvm.data.CasellaDAO;
import it.unicam.ids.pvm.data.CassaDAO;
import it.unicam.ids.pvm.data.Configurazione;
import it.unicam.ids.pvm.data.DAOException;
import it.unicam.ids.pvm.data.DAOFactory;
import it.unicam.ids.pvm.data.ProdottoDAO;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * La classe rappresenta un'estensione dell'astrazione 
 * DAOFactory, relativa al DBMS MySQL.
 * @author Luca Iachini, Valerio Iachini, Alessandro Cardenà
 *
 */
public class MySQLDAOFactory extends DAOFactory {
	public static final String DRIVER = "com.mysql.jdbc.Driver";

	/**
	 * Il metodo consente di stabilire una connessione al 
	 * database di MySQL.
	 * @return conn connessione.
	 * @throws DAOException messaggio d'errore relativo 
	 * 							alla connessione o al driver.
	 */
	
	// method to create Cloudscape connections
	public static Connection createConnection() throws DAOException {
		Connection conn = null;
		try {
			Class.forName(DRIVER);
			String url = Configurazione.getInstance().getUrl();
			String username = Configurazione.getInstance().getUser();
			String password = Configurazione.getInstance().getPassword();
			conn = DriverManager.getConnection(url, username, password);
		} catch (ClassNotFoundException e) {
			throw new DAOException("Impossibile caricare il driver");
		} catch (SQLException e) {
			throw new DAOException("Errore nella connessione con il db MySQL : "+e.getMessage());
		}
		return conn;
	}

	@Override
	public AnnuncioDAO getAnnuncioDAO() {
		return new MySQLAnnuncioDAO();
	}

	@Override
	public CasellaDAO getCasellaDAO() {
		return new MySQLCasellaDAO();
	}

	@Override
	public CassaDAO getCassaDAO() {
		return new MySQLCassaDAO();
	}

	@Override
	public ProdottoDAO getProdottoDAO() {
		return new MySQLProdottoDAO();
	}

}